package 集合框架.Set.课后作业.M1;

import java.util.LinkedList;
import java.util.List;

/**
 * 第1题：使用LinkedList模拟一个堆栈（MyStack）数据结构,写一个 MyStack 类，表示“栈”这种数据结构。
 * Stack栈的特点：First In Last Out (FILO)  先进后出或后进先出。
 * 栈在表示上，就如同一个单向开口的盒子，每当有新数据进入时，都是进入栈顶。其基
 * 本操作为 push 和 pop。push 表示把一个元素加入栈顶，pop 表示把栈顶元素弹出。
 * 示意图如下：
 * 栈的特点：先进后出/后进先出。
 * 栈的基本操作：
 * 1） push(Object o)：表示把元素放入栈
 * 2） Object pop()：返回栈顶元素，并把该元素从栈中删除。如果栈为空，则返回 null 值
 * 3） Object peek()：返回栈顶元素，但不把该元素删除。如果栈为空，则返回 null 值。
 * 4） boolean isEmpty()：判断该栈是否为空
 * 5） int size()：返回该栈中元素的数量
 */
public class MyStack {
    LinkedList<Object>List = new LinkedList<>();

    public void push(Object o){
        List.addFirst(o);
    }

    public Object pop(){
        Object obj = List.getFirst();
        List.removeFirst();

        if (List.isEmpty()){
            return null;
        }
        return obj;
    }

    public Object peek(){
        Object obj = List.getFirst();
        if (List.isEmpty()){
            return null;
        }
        return obj;
    }

    public int size(){
        return List.size();
    }

    public static void main(String[] args) {

        MyStack m = new MyStack();
        m.push("a");
        m.push("b");
        m.push("c");

        if (m.size()!=0){
            System.out.println(m.pop());
            // System.out.println(m.peek());
        }
    }
}

